home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI3 / LEZIONE7u.s < prev    next >
Text File  |  1994-11-28  |  4KB  |  166 lines

  1.  
  2. ; lezione7u.s  - ESEMPIO Double Playfield
  3. ; Questo e` un semplice esempio del dual playfield mode.
  4. ; Sono visualizzati i due playfield. Premendo il bottone destro si cambia
  5. ; la priorita` dei due playfield. Sinistro per uscire
  6. ; Fate attenzione alla copperlist, perche' le principali differenze del modo
  7. ; Dual Playfield rispetto al modo normale e' nei BPLPOINTERS e nei colori.
  8.  
  9.  
  10.     SECTION    CiriCop,CODE
  11.  
  12. Inizio:
  13.     move.l    4.w,a6        ; Execbase
  14.     jsr    -$78(a6)    ; Disable
  15.     lea    GfxName(PC),a1    ; Nome lib
  16.     jsr    -$198(a6)    ; OpenLibrary
  17.     move.l    d0,GfxBase
  18.     move.l    d0,a6
  19.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  20.  
  21. ;    Puntiamo le PIC
  22.  
  23.     MOVE.L    #PIC1,d0    ; puntiamo il playfield 1
  24.     LEA    BPLPOINTERS1,A1
  25.     MOVEQ    #3-1,D1
  26. POINTBP:
  27.     move.w    d0,6(a1)
  28.     swap    d0
  29.     move.w    d0,2(a1)
  30.     swap    d0
  31.     ADD.L    #40*256,d0
  32.     addq.w    #8,a1
  33.     dbra    d1,POINTBP
  34.  
  35.     MOVE.L    #PIC2,d0    ; puntiamo il playfield 2
  36.     LEA    BPLPOINTERS2,A1
  37.     MOVEQ    #3-1,D1
  38. POINTBP2:
  39.     move.w    d0,6(a1)
  40.     swap    d0
  41.     move.w    d0,2(a1)
  42.     swap    d0
  43.     ADD.L    #40*256,d0
  44.     addq.w    #8,a1
  45.     dbra    d1,POINTBP2
  46.  
  47.  
  48.     move.l    #COPPERLIST,$dff080    ; nostra COP
  49.     move.w    d0,$dff088        ; START COP
  50.     move.w    #0,$dff1fc        ; NO AGA!
  51.     move.w    #$c00,$dff106        ; NO AGA!
  52.  
  53. mouse1:
  54.     btst    #2,$dff016    ; mouse premuto?
  55.     bne.s    mouse2
  56.  
  57.     bchg.b    #6,BPLCON2    ; scambiamo la priorita' agendo sul bit 6
  58.                 ; del $dff104
  59.  
  60. mouse2:
  61.     btst    #6,$bfe001    ; mouse premuto?
  62.     bne.s    mouse1
  63.  
  64.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  65.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  66.  
  67.     move.l    4.w,a6
  68.     jsr    -$7e(a6)    ; Enable
  69.     move.l    gfxbase(PC),a1
  70.     jsr    -$19e(a6)    ; Closelibrary
  71.     rts
  72.  
  73. ;    Dati
  74.  
  75. GfxName:
  76.     dc.b    "graphics.library",0,0
  77.  
  78. GfxBase:
  79.     dc.l    0
  80.  
  81. OldCop:
  82.     dc.l    0
  83.  
  84.  
  85.     SECTION    GRAPHIC,DATA_C
  86.  
  87. COPPERLIST:
  88. SpritePointers:
  89.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  90.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  91.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  92.     dc.w    $13e,0
  93.  
  94.  
  95.     dc.w    $8E,$2c81    ; DiwStrt
  96.     dc.w    $90,$2cc1    ; DiwStop
  97.     dc.w    $92,$38        ; DdfStart
  98.     dc.w    $94,$d0        ; DdfStop
  99.     dc.w    $102,0        ; BplCon1
  100.  
  101.     dc.w    $104        ; BplCon2
  102.     dc.b    0
  103. BPLCON2:
  104.     dc.b    0        ; priorita' fra playfields: bit 6
  105.  
  106.     dc.w    $108,0        ; Bpl1Mod
  107.     dc.w    $10a,0        ; Bpl2Mod
  108.  
  109.             ; 5432109876543210
  110.     dc.w    $100,%0110011000000000    ; bit 10 acceso = dual playfield
  111.                     ; uso 6 planes = 8 colori per playfield
  112.  
  113. BPLPOINTERS1:
  114.     dc.w $e0,0,$e2,0    ;primo bitplane playfield 1 (BPLPT1)
  115.     dc.w $e8,0,$ea,0    ;secondo bitplane playfield 1 (BPLPT3)
  116.     dc.w $f0,0,$f2,0    ;terzo bitplane playfield 1 (BPLPT5)
  117.  
  118.  
  119. BPLPOINTERS2:
  120.     dc.w $e4,0,$e6,0    ;primo bitplane playfield 2 (BPLPT2)
  121.     dc.w $ec,0,$ee,0    ;secondo bitplane playfield 2 (BPLPT4)
  122.     dc.w $f4,0,$f6,0    ;terzo bitplane playfield 2 (BPLPT6)
  123.  
  124.     dc.w    $180,$0f0    ; palette playfield 1
  125.     dc.w    $182,$005    ; colori da 0 a 7
  126.     dc.w    $184,$a40 
  127.     dc.w    $186,$f80 
  128.     dc.w    $188,$f00 
  129.     dc.w    $18a,$0f0 
  130.     dc.w    $18c,$00f 
  131.     dc.w    $18e,$080 
  132.  
  133.                 ; palette playfield 2
  134.     dc.w    $192,$367    ; colori da 9 a 15
  135.     dc.w    $194,$0cc     ; il colore 8 e` trasparente, non va settato
  136.     dc.w    $196,$a0a
  137.     dc.w    $198,$242
  138.     dc.w    $19a,$282 
  139.     dc.w    $19c,$861 
  140.     dc.w    $19e,$ff0 
  141.  
  142.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  143.  
  144. ;    Ecco le figure dei 2 playfields
  145.  
  146. PIC1:    incbin    "dual1.raw"
  147. PIC2:    incbin    "dual2.raw"
  148.  
  149.     end
  150.  
  151. Questo e` un semplice esempio di uso del modo dual-playfield. Per 
  152. visualizzare una schermata dual playfield si eseguono, piu` o meno, le stesse
  153. operazioni. Bisogna solo tenere presente che nel puntare i bit-planes, i 
  154. dispari puntano ad un playfield e i pari all'altro. Di solito quindi si usano 
  155. 2 routine separate, e anche nella copperlist i bit-planes dispari sono 
  156. separati dai pari. Per quanto riguarda i colori, ogni playfield ha la sua 
  157. palette. I colori 0 e 8 fanno da trasparente, cioe` lasciano vedere cosa c'e` 
  158. sotto, allo stesso modo che il trasparente degli sprites. Il colore 0, pero`, 
  159. fa anche da sfondo, nel senso che nelle zone dello schermo in cui entrambi i
  160. playfield sono trasparenti, viene SEMPRE visualizzato il colore 0, 
  161. indipendentemente dalla pririta` dei due playfield. Per questo motivo, il 
  162. colore 0 va comunque settato, mentre e` inutile settare il colore 8.
  163. La priorita` dei 2 playfield e` controllata dal bit 6 del registro BPLCON2
  164. ($dff104): se il bit vale 0 il playfield 1 appare sopra al 2, viceversa se il 
  165. bit vale 1.
  166.